/**
 * 自定义人民币格式化(支持超大数字)
 * @param {number|string} num - 要格式化的数字
 * @param {Object} [options]
 * @param {boolean} [options.prefix='¥'] - 前缀符号
 * @param {number} [options.decimal=2] - 保留小数位数
 * @param {boolean} [options.split=3] - 整数部分分割位数
 * @param {boolean} [options.autoUnit=true] - 自动转换为万/亿单位
 * @returns {string}
 */
export function formatCurrency(
  num,
  { prefix = "¥", decimal = 2, split = 3, autoUnit = true } = {}
) {
  // 转换为数字
  num = typeof num === "string" ? parseFloat(num) : num;
  if (isNaN(num)) return "无效金额";

  // 处理负数
  const isNegative = num < 0;
  num = Math.abs(num);

  // 自动单位转换
  let unit = "";
  if (autoUnit) {
    if (num >= 100000000) {
      num = num / 100000000;
      unit = "亿";
    } else if (num >= 10000) {
      num = num / 10000;
      unit = "万";
    }
  }

  // 处理小数部分
  let decimalPart = "";
  if (decimal > 0) {
    const pow = Math.pow(10, decimal);
    decimalPart = ((Math.round(num * pow) % pow) / pow)
      .toFixed(decimal)
      .slice(1);
  }

  // 处理整数部分
  let integerPart = Math.floor(num).toString();
  if (split > 0) {
    integerPart = integerPart.replace(
      /(\d)(?=(\d{3})+(?!\d))/g,
      `$1${String.fromCharCode(8201)}` // 使用窄空格
    );
  }

  // 组合结果
  let result = `${integerPart}${decimalPart}${unit}`;
  if (prefix) {
    result = `${prefix}${result}`;
  }
  if (isNegative) {
    result = `-${result}`;
  }

  return result;
}
